﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SDT.Model;
using SDT.Lib.Common;
using SDT.Lib.Paging;
using SDT.Admin.ViewModels;
using System.Web.Security;
using SDT.Admin.Properties;
using SDT.Lib.Helpers;
namespace SDT.Admin.Controllers
{
    [RoleHelper(Roles = RoleSystem.Dictionary)]
    public class TagController : Controller
    {
        /// <summary>
        /// Created by: VietLv
        /// Created date: 10/08/2011
        /// Description: Manage tags
        /// </summary>

        SDTDataContext eDataContext = new SDTDataContext();
        #region GET/Index
        public ActionResult Index(int? page)
        {
            try
            {
                if (!page.HasValue) page = 1;
                string keyword = UserState.getUserStateFromRequest("Tag.Keyword", "Keyword", "").ToString();
                int pageSize = int.Parse(UserState.getUserStateFromRequest("Tags.pageSize", "PageSize", 20).ToString());
                var listTags = eDataContext.Tags
                   .Where(t => (string.IsNullOrEmpty(keyword) ? true :
                                (t.Keyword.ToString().ToLower().Contains(keyword.ToLower().Trim())
                                ))).ToPagedList(page.Value - 1, pageSize);

                return View(new IndexTagViewModel
                {
                    Tags = listTags,
                    Keyword = keyword
                });
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion
        #region POST: /Tag/Create
        public ActionResult Create()
        {
            try
            {
                return View();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region POST: /Tag/Create
        [HttpPost]
        public ActionResult Create(Tag tag)
        {
            try
            {
                UpdateModel(tag);
                var t = new Tag();
                t.AddBy = UserManager.GetUserId();
                t.AddDate = DateTime.Now;
                t.Keyword = tag.Keyword;
                eDataContext.Tags.InsertOnSubmit(t);
                eDataContext.SubmitChanges();
                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                ViewData["MessageInfo"] = "Thêm tag mới không thành công. Vui lòng thử lại với dữ liệu khác";
                return View();
            }
        }
        #endregion

        #region GET: /Tag/Edit
        public ActionResult Edit(int id)
        {
            try
            {
                var currentTag = eDataContext.Tags.Where(e => e.ID == id).SingleOrDefault();
                return View(currentTag);
            }
            catch (Exception ex)
            {
                ViewData[Messages.MessageInfo] = "Không tìm thấy tag hiện tại. Vui lòng thử lại với dữ liệu khác";
                return View();
            }
        }
        #endregion

        #region POST: /Tag/Edit
        [HttpPost]
        public ActionResult Edit(int id, Tag tag)
        {
            try
            {
                if (id < 0) throw new NotSupportedException();
                UpdateModel(tag);
                var currentTag = eDataContext.Tags.Where(e => e.ID == id).SingleOrDefault();
                currentTag.Keyword = tag.Keyword;
                currentTag.ModifyBy = UserManager.GetUserId();
                currentTag.ModifyDate = DateTime.Now;
                eDataContext.SubmitChanges();
                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                ViewData["MessageInfo"] = "Sửa tag ko thành công";
                return View();
            }
        }
        #endregion

        #region GET: /Tag/Delete
        public ActionResult Delete(int id)
        {
            try
            {
                
                var currentTag = eDataContext.Tags.Where(e => e.ID == id).SingleOrDefault();
                return View(currentTag);
            }
            catch (Exception ex)
            {
                ViewData["MessageInfo"] = "Có lỗi xảy ra bạn không thể xóa được";
                return View();
            }
        }
        #endregion

        #region POST: /ConvertPrice/Delete
        [HttpPost]
        public ActionResult Delete(int id, FormCollection frm)
        {
            try
            {
                var currentTag = eDataContext.Tags.Where(ca => ca.ID == id).SingleOrDefault();
                eDataContext.Tags.DeleteOnSubmit(currentTag);
                eDataContext.SubmitChanges();
                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                ViewData["MessageInfo"] = "Có lỗi xảy ra bạn không thể xóa được";
                return View();
            }

        }
        #endregion

        #region GET: /ConvertPrice/Detail
        public ActionResult Detail(int id)
        {
            try
            {
                
                var currentTag = eDataContext.Tags.Where(ca => ca.ID == id).SingleOrDefault();

                return View(currentTag);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

    }
}
